pub offline: bool,
pub no_index_update: bool,
pub avoid_dev_deps: bool,
+ pub minimal_versions: bool,
}
impl CliUnstable {
"offline" => self.offline = true,
"no-index-update" => self.no_index_update = true,
"avoid-dev-deps" => self.avoid_dev_deps = true,
+ "minimal-versions" => self.minimal_versions = true,
_ => bail!("unknown `-Z` flag specified: {}", k),
}
warnings: RcList::new(),
};
let _p = profile::start("resolving");
- let mut registry = RegistryQueryer::new(registry, replacements, try_to_use);
+ let minimal_versions = match config {
+ Some(config) => config.cli_unstable().minimal_versions,
+ None => false,
+ };
+ let mut registry = RegistryQueryer::new(registry, replacements, try_to_use, minimal_versions);
let cx = activate_deps_loop(cx, &mut registry, summaries, config)?;
let mut resolve = Resolve {
try_to_use: &'a HashSet<&'a PackageId>,
// TODO: with nll the Rc can be removed
cache: HashMap<Dependency, Rc<Vec<Candidate>>>,
+ minimal_versions: bool,
}
impl<'a> RegistryQueryer<'a> {
registry: &'a mut Registry,
replacements: &'a [(PackageIdSpec, Dependency)],
try_to_use: &'a HashSet<&'a PackageId>,
+ minimal_versions: bool,
) -> Self {
RegistryQueryer {
registry,
replacements,
cache: HashMap::new(),
try_to_use,
+ minimal_versions,
}
}
let b_in_previous = self.try_to_use.contains(b.summary.package_id());
let a = (a_in_previous, a.summary.version());
let b = (b_in_previous, b.summary.version());
- a.cmp(&b).reverse()
+ match self.minimal_versions {
+ true => a.cmp(&b),
+ false => a.cmp(&b).reverse(),
+ }
});
let out = Rc::new(ret);